From 028a7b63063e6a25266c3c5fc019143d2dbfd73e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 3 Apr 2018 15:43:45 +0300 Subject: [PATCH] Feature gate `--out-dir` --- src/bin/commands/build.rs | 5 +++++ src/cargo/core/features.rs | 2 ++ tests/testsuite/out_dir.rs | 28 +++++++++++++++++++++++----- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/bin/commands/build.rs b/src/bin/commands/build.rs index 21d4e860d..1b00ea4fd 100644 --- a/src/bin/commands/build.rs +++ b/src/bin/commands/build.rs @@ -52,6 +52,11 @@ pub fn exec(config: &mut Config, args: &ArgMatches) -> CliResult { let ws = args.workspace(config)?; let mut compile_opts = args.compile_options(config, CompileMode::Build)?; compile_opts.export_dir = args.value_of_path("out-dir", config); + if compile_opts.export_dir.is_some() && !config.cli_unstable().out_dir { + Err(format_err!( + "`--out-dir` flag is unstable, pass `-Z out-dir` to enable it" + ))?; + }; ops::compile(&ws, &compile_opts)?; Ok(()) } diff --git a/src/cargo/core/features.rs b/src/cargo/core/features.rs index 09eff8545..0b619d804 100644 --- a/src/cargo/core/features.rs +++ b/src/cargo/core/features.rs @@ -286,6 +286,7 @@ pub struct CliUnstable { pub no_index_update: bool, pub avoid_dev_deps: bool, pub minimal_versions: bool, + pub out_dir: bool, } impl CliUnstable { @@ -319,6 +320,7 @@ impl CliUnstable { "no-index-update" => self.no_index_update = true, "avoid-dev-deps" => self.avoid_dev_deps = true, "minimal-versions" => self.minimal_versions = true, + "out-dir" => self.out_dir = true, _ => bail!("unknown `-Z` flag specified: {}", k), } diff --git a/tests/testsuite/out_dir.rs b/tests/testsuite/out_dir.rs index 775122c5f..231f50122 100644 --- a/tests/testsuite/out_dir.rs +++ b/tests/testsuite/out_dir.rs @@ -1,3 +1,4 @@ +use cargotest::ChannelChanger; use cargotest::support::{execs, project}; use hamcrest::assert_that; use std::path::Path; @@ -18,7 +19,11 @@ fn binary_with_debug() { .file("src/main.rs", r#"fn main() { println!("Hello, World!") }"#) .build(); - assert_that(p.cargo("build --out-dir out"), execs().with_status(0)); + assert_that( + p.cargo("build -Z out-dir --out-dir out") + .masquerade_as_nightly_cargo(), + execs().with_status(0), + ); check_dir_contents( &p.root().join("out"), &["foo"], @@ -51,7 +56,11 @@ fn static_library_with_debug() { ) .build(); - assert_that(p.cargo("build --out-dir out"), execs().with_status(0)); + assert_that( + p.cargo("build -Z out-dir --out-dir out") + .masquerade_as_nightly_cargo(), + execs().with_status(0), + ); check_dir_contents( &p.root().join("out"), &["libfoo.a"], @@ -84,7 +93,11 @@ fn dynamic_library_with_debug() { ) .build(); - assert_that(p.cargo("build --out-dir out"), execs().with_status(0)); + assert_that( + p.cargo("build -Z out-dir --out-dir out") + .masquerade_as_nightly_cargo(), + execs().with_status(0), + ); check_dir_contents( &p.root().join("out"), &["libfoo.so"], @@ -116,7 +129,11 @@ fn rlib_with_debug() { ) .build(); - assert_that(p.cargo("build --out-dir out"), execs().with_status(0)); + assert_that( + p.cargo("build -Z out-dir --out-dir out") + .masquerade_as_nightly_cargo(), + execs().with_status(0), + ); check_dir_contents( &p.root().join("out"), &["libfoo.rlib"], @@ -166,7 +183,8 @@ fn include_only_the_binary_from_the_current_package() { .build(); assert_that( - p.cargo("build --bin foo --out-dir out"), + p.cargo("build -Z out-dir --bin foo --out-dir out") + .masquerade_as_nightly_cargo(), execs().with_status(0), ); check_dir_contents( -- 2.30.2